cmake_minimum_required(VERSION 3.27)
# 获取当前工作目录的名称作为项目名称，但首先检查是否已定义，以避免重复定义错误
if(NOT PROJECT_NAME)
    get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
endif()
message(STATUS "Project name: ${PROJECT_NAME}")
project(${PROJECT_NAME} CXX)

# 设置C++标准为C++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 配置可执行文件输出到与CMakeLists.txt同级的bin目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

# 使用GLOB匹配src目录下所有cpp文件，并为每个文件创建可执行文件
# file(GLOB SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file(GLOB_RECURSE SRC_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/src" "src/*.cpp")
foreach(SRC_FILE ${SRC_FILES})
    get_filename_component(EXECUTABLE_NAME ${SRC_FILE} NAME_WE)
    # 创建可执行文件
    add_executable(${EXECUTABLE_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/src/${SRC_FILE}")
endforeach()

# 添加编译选项，包括警告全部开启，并指定执行字符集为GBK解决中文乱码问题
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")
